﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;

public partial class _InscritosCursos : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["CadastraFuncao"] == null)
            Response.Redirect("mensagens.aspx?id=2");
        else if (bool.Parse(Session["CadastraFuncao"].ToString()))
        {
            lblCadastraFuncao.Text = "<a href=\"javascript: void(0)\" onclick=\"window.open('FuncoesCadastro.aspx','Cadatro','width=520,height=500');return false;\">(cadastrar função)</a>";
            lblCadastraFuncao.Visible = true;
        }
    }
    protected void btnPesquisar_Click(object sender, ImageClickEventArgs e)
    {
        ddInscritos.Items.Clear();
        ddInscritos.Items.Add("");
        gridCursos.EmptyDataText = "";
        if (txtNome.Text != "")
            dsInscritos.SelectCommand = "SELECT (CPF + ';' + Cast(Disponivel as Varchar)) as CPF, NomeAluno FROM CamaraInscritos WHERE NomeAluno LIKE '%"+ txtNome.Text +"%' ORDER BY NomeAluno";
        else if (txtCPF.Text != "")
            dsInscritos.SelectCommand = "SELECT (CPF + ';' + Cast(Disponivel as Varchar)) as CPF, NomeAluno FROM CamaraInscritos WHERE CPF LIKE '" + txtCPF.Text + "%' ORDER BY NomeAluno";

    }

    protected void btnCadastrar_Click(object sender, ImageClickEventArgs e)
    {
        if (ddInscritos.SelectedValue == "")
        {
            lblMensagemQualificacao.ForeColor = System.Drawing.Color.Red;
            lblMensagemQualificacao.Text = "Selecione o inscrito <br />&nbsp;";
        }
        else
        {
	        if (InsereInscritoCurso())
    	    {
        	    gridCursos.DataBind();
                LimparCamposQualificacoes();
            	lblMensagemQualificacao.Text = "Qualificação inserida com sucesso";
	        }
		}
    }

    private void LimparCamposQualificacoes()
    {
        ddCursos.ClearSelection();
    }

    protected bool InsereInscritoCurso()
    {
        //DateTime Data = Convert.ToDateTime(DateTime.Now.ToString("dd/MM/yyyy"));
        bool insere = false;
        SqlConnection conexaoIntranet = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao_intranet"].ConnectionString);
        try
        {
            conexaoIntranet.Open();
            string[] codigos = ddCursos.SelectedValue.Split(';'); //o codigos[0] é o codcurso e o codigos[1] é a categoria
            string[] inscrito = ddInscritos.SelectedValue.Split(';'); //o inscrito[0] é o cpf
            SqlCommand insereCurso = new SqlCommand();
            insereCurso.Connection = conexaoIntranet;
            string coluna = "";
            switch (codigos[1].ToString())
            {
                case "1":
                    coluna = "Capacitacao";
                    break;
                case "2":
                    coluna = "Aperfeicoamento";
                    break;
                case "4":
                    coluna = "Informatica";
                    break;
                case "5":
                    coluna = "Idioma";
                    break;
                case "6":
                    coluna = "AtivComplementares";
                    break;
                case "8":
                    coluna = "Aprendiz";
                    break;
            }
            insereCurso.CommandText = "UPDATE CamaraInscritos SET " + coluna + " = 1 WHERE CPF = '" + inscrito[0].ToString() + "'";
            insereCurso.ExecuteNonQuery();
            insereCurso.CommandText = "INSERT INTO CamaraInscritosCursos (CPF, CodCurso) values ('" + inscrito[0].ToString() + "', " + codigos[0].ToString() + ")";
            insere = (insereCurso.ExecuteNonQuery() == 1);            
        }
        catch (Exception erro)
        {
            if (erro is SqlException)
            {
                lblMensagemQualificacao.ForeColor = System.Drawing.Color.Red;
                lblMensagemQualificacao.Text = "Você não pode cadastrar o mesmo curso 2 vezes para o mesmo inscrito";
            }
            else
                lblMensagemQualificacao.Text = erro.Message;
        }
        finally
        {
            conexaoIntranet.Close();
        }
        return insere;
    }

    protected void ddInscritos_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddInscritos.SelectedValue != "")
        {
            btnDisponivel.Visible = true;
            string[] dadosInscrito = ddInscritos.SelectedValue.Split(';');
            string cpf = dadosInscrito[0].ToString();
            string disponivel = dadosInscrito[1].ToString();
            
            if (disponivel == "1")
                btnDisponivel.Text = "Marcar como indisponível";
            else if (disponivel == "0")
                btnDisponivel.Text = "Marcar como disponível";

            dsInscritosTurmas.SelectParameters["cpf"].DefaultValue = cpf;
            dsInscritosExperiencias.SelectParameters["cpf"].DefaultValue = cpf;
            dsInscritosOutrasCapacitacoes.SelectParameters["cpf"].DefaultValue = cpf;
            gridCursos.EmptyDataText = "Não existe nenhuma qualificação atribuída à " + ddInscritos.SelectedItem.Text;
            gridExperiencias.EmptyDataText = "Não existe nenhuma experiência atribuída à " + ddInscritos.SelectedItem.Text;
            gridOutrasCapacitacoes.EmptyDataText = "Não existem outras capacitações atribuídas à " + ddInscritos.SelectedItem.Text;
        }
    }

    protected void gridCursos_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Delete")
        {
            if (RetornaNCursosCategoria(e.CommandArgument.ToString()) == 1)
                AtualizaInscrito(e.CommandArgument.ToString());
        }
    }

    private void AtualizaInscrito(string codCategoria)
    {
        SqlConnection conexaoIntranet = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao_intranet"].ConnectionString);
        try
        {
            conexaoIntranet.Open();
            SqlCommand insereCurso = new SqlCommand();
            insereCurso.Connection = conexaoIntranet;
            string[] inscrito = ddInscritos.SelectedValue.Split(';');
            string coluna = "";
            switch (codCategoria)
            {
                case "1":
                    coluna = "Capacitacao";
                    break;
                case "2":
                    coluna = "Aperfeicoamento";
                    break;
                case "3":
                    coluna = "Ejovem";
                    break;
                case "4":
                    coluna = "AlfEcologica";
                    break;
                case "5":
                    coluna = "Idioma";
                    break;
                case "6":
                    coluna = "ConComplementares";
                    break;
                case "7":
                    coluna = "Informatica";
                    break;
                case "8":
                    coluna = "Aprendiz";
                    break;
            }
            insereCurso.CommandText = "UPDATE CamaraInscritos SET " + coluna + " = 0 WHERE CPF = '" + inscrito[0].ToString() + "'";
            insereCurso.ExecuteNonQuery();
        }
        catch (Exception erro)
        {
            lblMensagemQualificacao.ForeColor = System.Drawing.Color.Red;
            lblMensagemQualificacao.Text = erro.Message;
        }
        finally
        {
            conexaoIntranet.Close();
        }
    }

    private void AtualizaOutrasCapacitacoesInscrito(string cpf)
    {
        SqlConnection conexaoIntranet = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao_intranet"].ConnectionString);
        try
        {
            conexaoIntranet.Open();
            SqlCommand atualizaOutrasCapacitacoes = new SqlCommand();
            atualizaOutrasCapacitacoes.Connection = conexaoIntranet;
            atualizaOutrasCapacitacoes.CommandText = "UPDATE CamaraInscritos SET OutrasCapacitacoes = 0 WHERE CPF = '" + cpf + "'";
            atualizaOutrasCapacitacoes.ExecuteNonQuery();
        }
        catch (Exception erro)
        {
            lblMensagemOutras.ForeColor = System.Drawing.Color.Red;
            lblMensagemOutras.Text = erro.Message;
        }
        finally
        {
            conexaoIntranet.Close();
        }
    }

    protected int RetornaNCursosCategoria(string codCategoria)
    {
        SqlConnection conexaoIntranet = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao_intranet"].ConnectionString);
        try
        {
            if (conexaoIntranet != null && conexaoIntranet.State != ConnectionState.Open)
                conexaoIntranet.Open();
            string[] inscrito = ddInscritos.SelectedValue.Split(';');
            string instrucao = "SELECT Count(*) FROM CamaraCursos INNER JOIN CamaraInscritosCursos ON CamaraCursos.CodCurso = CamaraInscritosCursos.CodCurso WHERE (((CamaraInscritosCursos.CPF)='"+ inscrito[0].ToString() +"') AND ((CamaraCursos.CodCategoria)="+ codCategoria +"))";
            SqlCommand consultaLogin = new SqlCommand(instrucao, conexaoIntranet);
            int nInscritos = Convert.ToInt32(consultaLogin.ExecuteScalar());
            return nInscritos;
        }
        finally
        {
            conexaoIntranet.Close();
        }

    }

    protected int RetornaNOutrasCapacitacoes(string cpf)
    {
        SqlConnection conexaoIntranet = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao_intranet"].ConnectionString);
        try
        {
            if (conexaoIntranet != null && conexaoIntranet.State != ConnectionState.Open)
                conexaoIntranet.Open();
            string instrucao = "SELECT Count(*) FROM CamaraInscritosOutrasCapacitacoes WHERE (CPF='" + cpf + "')";
            SqlCommand consultaLogin = new SqlCommand(instrucao, conexaoIntranet);
            int nInscritos = Convert.ToInt32(consultaLogin.ExecuteScalar());
            return nInscritos;
        }
        finally
        {
            conexaoIntranet.Close();
        }

    }

    protected void btnCadastrarOutrasCap_Click(object sender, ImageClickEventArgs e)
    {
        if (ddInscritos.SelectedValue == "")
        {
            lblMensagemOutras.ForeColor = System.Drawing.Color.Red;
            lblMensagemOutras.Text = "Selecione o inscrito <br />&nbsp;";
        }
        else
        {
            if (InsereInscritoOutrasCapacitacoes())
            {
                gridOutrasCapacitacoes.DataBind();
                LimparCamposOutrasCapacitacoes();
                lblMensagemOutras.Text = "Qualificação inserida com sucesso";
            }
        }
    }

    private void LimparCamposOutrasCapacitacoes()
    {
        txtInstituicao.Text = "";
        txtCurso.Text = "";
        txtCH.Text = "";
    }

    private bool InsereInscritoOutrasCapacitacoes()
    {
        //DateTime DtCapacitacao = Convert.ToDateTime(DateTime.Now.ToString("dd/MM/yyyy"));
        bool insere = false;
        SqlConnection conexaoIntranet = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao_intranet"].ConnectionString);
        try
        {
            conexaoIntranet.Open();
            SqlCommand insereCurso = new SqlCommand();
            insereCurso.Connection = conexaoIntranet;
            string[] inscrito = ddInscritos.SelectedValue.Split(';');
            insereCurso.CommandText = "UPDATE CamaraInscritos SET OutrasCapacitacoes = 1 WHERE CPF = '" + inscrito[0].ToString() + "'";
            insereCurso.ExecuteNonQuery();
            insereCurso.CommandText = "INSERT INTO CamaraInscritosOutrasCapacitacoes (CPF, Curso, CH, Instituicao) values ('" + inscrito[0].ToString() + "', '" + PrimeiraMaiuscula(txtCurso.Text.Replace("'", "")) + "', '" + txtCH.Text.ToLower() + "', '" + PrimeiraMaiuscula(txtInstituicao.Text.Replace("'", "")) + "')";
            //Response.Write(insereCurso);
            insere = (insereCurso.ExecuteNonQuery() == 1);
            txtCurso.Text = "";
            txtCH.Text = "";
        }
        catch (Exception erro)
        {
            if (erro is SqlException)
            {
                lblMensagemOutras.ForeColor = System.Drawing.Color.Red;
                lblMensagemOutras.Text = "Você não pode cadastrar o mesmo curso 2 vezes para o mesmo inscrito";
            }
            else
                lblMensagemOutras.Text = erro.Message;
        }
        finally
        {
            conexaoIntranet.Close();
        }
        return insere;
    }

    protected void gridOutrasCapacitacoes_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Delete")
        {
            string[] inscrito = ddInscritos.SelectedValue.Split(';');
            if (RetornaNOutrasCapacitacoes(inscrito[0].ToString()) == 1)
                AtualizaOutrasCapacitacoesInscrito(inscrito[0].ToString());
        }
    }

    protected void btnCadastrarExperiencia_Click(object sender, ImageClickEventArgs e)
    {
        if (ddInscritos.SelectedValue == "")
        {
            lblMensagemExperiencia.ForeColor = System.Drawing.Color.Red;
            lblMensagemExperiencia.Text = "Selecione o inscrito <br />&nbsp;";
        }
        else
        {
            if (InsereInscritoExperiencia())
            {
                gridExperiencias.DataBind();
                lblMensagemExperiencia.Text = "Experiencia inserida com sucesso";
            }
        }
    }

    private bool InsereInscritoExperiencia()
    {
        bool insere = false;
        SqlConnection conexaoIntranet = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao_intranet"].ConnectionString);
        try
        {
            conexaoIntranet.Open();
            SqlCommand insereCurso = new SqlCommand();
            string[] inscrito = ddInscritos.SelectedValue.Split(';');
            insereCurso.Connection = conexaoIntranet;
            insereCurso.CommandText = "UPDATE CamaraInscritos SET Experiencia = 1 WHERE CPF = '" + inscrito[0].ToString() + "'";
            insereCurso.ExecuteNonQuery();
            insereCurso.CommandText = "INSERT INTO CamaraInscritosExperiencias (CPF, CodFuncao, Local, Tempo) values ('" + inscrito[0].ToString() + "', " + ddFuncoes.SelectedValue + ", '"+ PrimeiraMaiuscula(txtLocal.Text) +"', '"+ txtTempo.Text.ToLower() +"')";
            insere = (insereCurso.ExecuteNonQuery() == 1);
            ddSegmento.SelectedIndex = -1;
            ddFuncoes.SelectedIndex = -1;
            txtLocal.Text = "";
            txtTempo.Text = "";
        }
        catch (Exception erro)
        {
            if (erro is SqlException)
            {
                lblMensagemExperiencia.ForeColor = System.Drawing.Color.Red;
                lblMensagemExperiencia.Text = "Você não pode cadastrar a mesma experiência 2 vezes para o mesmo inscrito";
            }
            else
                lblMensagemExperiencia.Text = erro.Message;
        }
        finally
        {
            conexaoIntranet.Close();
        }
        return insere;
    }


    protected void gridExperiencias_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Delete")
        {
            string[] inscrito = ddInscritos.SelectedValue.Split(';');
            if (RetornaNExperiencias(inscrito[0].ToString()) == 1)
                AtualizaExperienciaInscrito(inscrito[0].ToString());
        }
    }

    protected int RetornaNExperiencias(string cpf)
    {
        SqlConnection conexaoIntranet = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao_intranet"].ConnectionString);
        try
        {
            if (conexaoIntranet != null && conexaoIntranet.State != ConnectionState.Open)
                conexaoIntranet.Open();
            string instrucao = "SELECT Count(*) FROM CamaraInscritosExperiencias WHERE (CPF='" + cpf + "')";
            SqlCommand consultaExperiencia = new SqlCommand(instrucao, conexaoIntranet);
            int nInscritos = Convert.ToInt32(consultaExperiencia.ExecuteScalar());
            return nInscritos;
        }
        finally
        {
            conexaoIntranet.Close();
        }

    }

    private void AtualizaExperienciaInscrito(string cpf)
    {
        SqlConnection conexaoIntranet = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao_intranet"].ConnectionString);
        try
        {
            conexaoIntranet.Open();
            SqlCommand atualizaOutrasCapacitacoes = new SqlCommand();
            atualizaOutrasCapacitacoes.Connection = conexaoIntranet;
            atualizaOutrasCapacitacoes.CommandText = "UPDATE CamaraInscritos SET Experiencia = 0 WHERE CPF = '" + cpf + "'";
            atualizaOutrasCapacitacoes.ExecuteNonQuery();
        }
        catch (Exception erro)
        {
            lblMensagemOutras.ForeColor = System.Drawing.Color.Red;
            lblMensagemOutras.Text = erro.Message;
        }
        finally
        {
            conexaoIntranet.Close();
        }
    }

    protected void ddSegmentos_SelectedIndexChanged(object sender, EventArgs e)
    {
        ddFuncoes.Items.Clear();
        ddFuncoes.Items.Add("");
        dsFuncoes.SelectCommand = "SELECT CodFuncao, Funcao FROM CamaraFuncoes WHERE Segmento = @segmento ORDER BY Funcao";

    }


    protected void btnDisponivel_Click(object sender, EventArgs e)
    {
        string[] dadosInscrito = ddInscritos.SelectedValue.Split(';');
        string cpf = dadosInscrito[0].ToString();
        string disponivel = dadosInscrito[1].ToString();
        string criterio = "";

        if (disponivel == "1")
            criterio = "0";
        else if (disponivel == "0")
            criterio = "1";

        SqlConnection conexaoIntranet = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao_intranet"].ConnectionString);
        try
        {
            conexaoIntranet.Open();
            SqlCommand insereCurso = new SqlCommand();
            insereCurso.Connection = conexaoIntranet;
            insereCurso.CommandText = "update Camarainscritos set disponivel = "+ criterio +" where cpf = '"+ cpf +"'";
            insereCurso.ExecuteNonQuery();
        }
        finally
        {
            conexaoIntranet.Close();
        }
        ddInscritos.SelectedIndex = -1;
        btnDisponivel.Visible = false;
    }

    protected string PrimeiraMaiuscula(string texto)
    {
        string[] txt = texto.Split(' ');
        string primeiraLetra = "";
        string letrasRestantes = "";

        for (int i = 0; i < txt.Length; i++)
        {
            if (txt[i].Length > 2)
            {
                primeiraLetra = txt[i].Substring(0, 1).ToString().ToUpper();
                letrasRestantes = txt[i].Substring(1, txt[i].Length - 1).ToString().ToLower();
                txt[i] = primeiraLetra + letrasRestantes;
            }
        }
        return String.Join(" ", txt);
    }

}